home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 1995-08-10 | 9.8 KB | 224 lines | [ TEXT/MPS ]
(* File: SoundInput.mod Contains: Sound Input Interfaces. Version: Technology: System 7.5 Package: Universal Interfaces 2.0 in “MPW Latest” on ETO #17 Copyright: © 1984-1995 by Apple Computer, Inc. All rights reserved. Bugs?: If you find a problem with this file, use the Apple Bug Reporter stack. Include the file and version information (from above) in the problem description and send to: Internet: apple.bugs.applelink.apple.com AppleLink: APPLE.BUGS *) (*$TAGS-*) (*$CALLING PASCAL*) MODULE SoundInput; IMPORT SYSTEM, Types, Dialogs, Sound; (* $PUSH*) (* $ALIGN MAC68K*) (* $LibExport+*) CONST siDeviceIsConnected* = 1; (*input device is connected and ready for input*) siDeviceNotConnected* = 0; (*input device is not connected*) siDontKnowIfConnected* = -1; (*can't tell if input device is connected*) siReadPermission* = 0; (*permission passed to SPBOpenDevice*) siWritePermission* = 1; (*permission passed to SPBOpenDevice*) (*Info Selectors for Sound Input Drivers*) siActiveChannels* = LONG("chac"); (*active channels*) siActiveLevels* = LONG("lmac"); (*active meter levels*) siAGCOnOff* = LONG("agc "); (*automatic gain control state*) siAsync* = LONG("asyn"); (*asynchronous capability*) siChannelAvailable* = LONG("chav"); (*number of channels available*) siCompressionAvailable* = LONG("cmav"); (*compression types available*) siCompressionFactor* = LONG("cmfa"); (*current compression factor*) siCompressionHeader* = LONG("cmhd"); (*return compression header*) siCompressionNames* = LONG("cnam"); (*compression type names available*) siCompressionType* = LONG("comp"); (*current compression type*) siContinuous* = LONG("cont"); (*continous recording*) siDeviceBufferInfo* = LONG("dbin"); (*size of interrupt buffer*) siDeviceConnected* = LONG("dcon"); (*input device connection status*) siDeviceIcon* = LONG("icon"); (*input device icon*) siDeviceName* = LONG("name"); (*input device name*) siHardwareBusy* = LONG("hwbs"); (*sound hardware is in use*) siInputGain* = LONG("gain"); (*input gain*) siInputSource* = LONG("sour"); (*input source selector*) siInputSourceNames* = LONG("snam"); (*input source names*) siLevelMeterOnOff* = LONG("lmet"); (*level meter state*) siNumberChannels* = LONG("chan"); (*current number of channels*) siOptionsDialog* = LONG("optd"); (*display options dialog*) siPlayThruOnOff* = LONG("plth"); (*playthrough state*) siRecordingQuality* = LONG("qual"); (*recording quality*) siSampleRate* = LONG("srat"); (*current sample rate*) siSampleRateAvailable* = LONG("srav"); (*sample rates available*) siSampleSize* = LONG("ssiz"); (*current sample size*) siSampleSizeAvailable* = LONG("ssav"); (*sample sizes available*) siStereoInputGain* = LONG("sgai"); (*stereo input gain*) siTwosComplementOnOff* = LONG("twos"); (*two's complement state*) siVoxRecordInfo* = LONG("voxr"); (*VOX record parameters*) siVoxStopInfo* = LONG("voxs"); (*VOX stop parameters*) siInitializeDriver* = LONG("init"); (*reserved for internal use only*) siCloseDriver* = LONG("clos"); (*reserved for internal use only*) siPauseRecording* = LONG("paus"); (*reserved for internal use only*) siUserInterruptProc* = LONG("user"); (*reserved for internal use only*) (*Qualities*) siCDQuality* = LONG("cd "); (*44.1kHz, stereo, 16 bit*) siBestQuality* = LONG("best"); (*22kHz, mono, 8 bit*) siBetterQuality* = LONG("betr"); (*22kHz, mono, MACE 3:1*) siGoodQuality* = LONG("good"); TYPE SPBPtr* = POINTER TO SPB; (*user procedures called by sound input routines*) (* SIInterruptProcPtr uses register based parameters on the 68k and cannot be written in or called from a high-level language without the help of mixed mode or assembly glue. In*: => inParamPtr A0.L => dataBuffer A1.L => peakAmplitude D0.W => sampleSize D1.L *) SIInterruptProcPtr* = Types.Register68kProcPtr; (* register PROCEDURE SIInterrupt*(inParamPtr: SPBPtr; dataBuffer: Types.Ptr; peakAmplitude: INTEGER; sampleSize: LONGINT); *) SICompletionProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (inParamPtr: SPBPtr); SIInterruptUPP* = Types.UniversalProcPtr; SICompletionUPP* = Types.UniversalProcPtr; SPB* = RECORD inRefNum*: LONGINT; (*reference number of sound input device*) count*: LONGINT; (*number of bytes to record*) milliseconds*: LONGINT; (*number of milliseconds to record*) bufferLength*: LONGINT; (*length of buffer in bytes*) bufferPtr*: Types.Ptr; (*buffer to store sound data in*) completionRoutine*: SICompletionUPP; (*completion routine*) interruptRoutine*: SIInterruptUPP; (*interrupt routine*) userLong*: LONGINT; (*user-defined field*) error*: Types.OSErr; (*error*) unused1*: LONGINT; (*reserved - must be zero*) END; PROCEDURE SPBVersion*(): LONGINT (*ΔΔ NumVersion*); (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $0000, $0014, $A800; (*$END*) PROCEDURE SndRecord*(filterProc: Dialogs.ModalFilterUPP; corner: Types.Point; quality: Types.OSType; VAR sndHandle: Sound.SndListHandle): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $0804, $0014, $A800; (*$END*) PROCEDURE SndRecordToFile*(filterProc: Dialogs.ModalFilterUPP; corner: Types.Point; quality: Types.OSType; fRefNum: INTEGER): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $0708, $0014, $A800; (*$END*) PROCEDURE SPBSignInDevice*(deviceRefNum: INTEGER; deviceName: Types.ConstStr255Param): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $030C, $0014, $A800; (*$END*) PROCEDURE SPBSignOutDevice*(deviceRefNum: INTEGER): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $0110, $0014, $A800; (*$END*) PROCEDURE SPBGetIndexedDevice*(count: INTEGER; VAR deviceName: Types.Str255; VAR deviceIconHandle: Types.Handle): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $0514, $0014, $A800; (*$END*) PROCEDURE SPBOpenDevice*(deviceName: Types.ConstStr255Param; permission: INTEGER; VAR inRefNum: LONGINT): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $0518, $0014, $A800; (*$END*) PROCEDURE SPBCloseDevice*(inRefNum: LONGINT): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $021C, $0014, $A800; (*$END*) PROCEDURE SPBRecord*(inParamPtr: SPBPtr; asynchFlag: BOOLEAN): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $0320, $0014, $A800; (*$END*) PROCEDURE SPBRecordToFile*(fRefNum: INTEGER; inParamPtr: SPBPtr; asynchFlag: BOOLEAN): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $0424, $0014, $A800; (*$END*) PROCEDURE SPBPauseRecording*(inRefNum: LONGINT): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $0228, $0014, $A800; (*$END*) PROCEDURE SPBResumeRecording*(inRefNum: LONGINT): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $022C, $0014, $A800; (*$END*) PROCEDURE SPBStopRecording*(inRefNum: LONGINT): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $0230, $0014, $A800; (*$END*) PROCEDURE SPBGetRecordingStatus*(inRefNum: LONGINT; VAR recordingStatus: INTEGER; VAR meterLevel: INTEGER; VAR totalSamplesToRecord: LONGINT; VAR numberOfSamplesRecorded: LONGINT; VAR totalMsecsToRecord: LONGINT; VAR numberOfMsecsRecorded: LONGINT): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $0E34, $0014, $A800; (*$END*) PROCEDURE SPBGetDeviceInfo*(inRefNum: LONGINT; infoType: Types.OSType; infoData: (*ΔΔUNIVΔΔ*) Types.Ptr): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $0638, $0014, $A800; (*$END*) PROCEDURE SPBSetDeviceInfo*(inRefNum: LONGINT; infoType: Types.OSType; infoData: (*ΔΔUNIVΔΔ*) Types.Ptr): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $063C, $0014, $A800; (*$END*) PROCEDURE SPBMillisecondsToBytes*(inRefNum: LONGINT; VAR milliseconds: LONGINT): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $0440, $0014, $A800; (*$END*) PROCEDURE SPBBytesToMilliseconds*(inRefNum: LONGINT; VAR byteCount: LONGINT): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $0444, $0014, $A800; (*$END*) PROCEDURE SetupSndHeader*(sndHandle: Sound.SndListHandle; numChannels: INTEGER; sampleRate: Sound.UnsignedFixed; sampleSize: INTEGER; compressionType: Types.OSType; baseNote: INTEGER; numBytes: LONGINT; VAR headerLen: INTEGER): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $0D48, $0014, $A800; (*$END*) PROCEDURE SetupAIFFHeader*(fRefNum: INTEGER; numChannels: INTEGER; sampleRate: Sound.UnsignedFixed; sampleSize: INTEGER; compressionType: Types.OSType; numBytes: LONGINT; numFrames: LONGINT): Types.OSErr; (*$IF NOT GENERATINGCFM*) INLINE PASCAL $203C, $0B4C, $0014, $A800; (*$END*) CONST uppSIInterruptProcInfo* = $1C579802; (* Register PROCEDURE (4 bytes in A0, 4 bytes in A1, 2 bytes in D0, 4 bytes in D1); *) uppSICompletionProcInfo* = $000000C0; (* PROCEDURE (4 byte param); *) PROCEDURE NewSIInterruptProc*(userRoutine: SIInterruptProcPtr): SIInterruptUPP; (*$IF NOT GENERATINGCFM *) INLINE PASCAL $2E9F; (*$END*) PROCEDURE NewSICompletionProc*(userRoutine: SICompletionProcPtr): SICompletionUPP; (*$IF NOT GENERATINGCFM *) INLINE PASCAL $2E9F; (*$END*) PROCEDURE CallSIInterruptProc*(inParamPtr: SPBPtr; dataBuffer: Types.Ptr; peakAmplitude: INTEGER; sampleSize: LONGINT; userRoutine: SIInterruptUPP); (*$IF NOT GENERATINGCFM*) INLINE PASCAL ; (*••*) (*To be implemented*: Glue to move parameters into registers.*) (*$END*) PROCEDURE CallSICompletionProc*(inParamPtr: SPBPtr; userRoutine: SICompletionUPP); (*$IF NOT GENERATINGCFM*) INLINE PASCAL $205F, $4E90; (*$END*) (* $ALIGN RESET*) (* $POP*) END SoundInput.